屏蔽国外IP访问的几种常用方法 |
您所在的位置:网站首页 › 海外云主机嘉v问^lotlek^可上词 › 屏蔽国外IP访问的几种常用方法 |
一、背景 网站的客户和受众人群都是国内的,不想让国外访问;或者站长监测到国外肉鸡一直有扫描或攻击。这时就需要对境外IP进行进行过滤和屏蔽;对IP进行过滤屏蔽一般有两种方法:加白和加黑。 加白就是把允许访问的添加入白名单中,没在白名单中的都进行屏蔽过滤,不允许访问;加黑就是把不允许访问的加入到黑名单中,没在黑名单中的完全放开,都可以进行访问。接下来介绍下屏蔽国外IP访问的几种常见方法。 黑名单: 要屏蔽的目标数量远远小于允许访问的数量时,就选择黑名单。只需要把需要屏蔽的加入黑名单中,其他完全放开就可以了。 白名单: 允许访问的目标数量远远小于要屏蔽的数量时就选择白名单。 二、使用Web应用防火墙或云防火墙代码语言:javascript复制说明:此方法需要单独购买Web应用防火墙或云防火墙产品。2.1 Web应用防火墙2.1.1 方法一:全球地域封禁功能登录 登录 - 腾讯云,在左侧导航栏,选择配置中心-基础安全-访问控制,进入基础安全页面,设置并开启“地域封禁”功能。 ![]() 此时您选择封禁的地区,将无法访问您的网站。本文将国外全部地区列入封禁地域后,以境外 IP 地址访问防护网站,Web 应用防火墙会提示您已被腾讯云 Web 应用防火墙拦截。 ![]() 腾讯云 Web 应用防火墙的黑白名单功能,指的是对经过 Web 应用防火墙防护域名的访问源 IP 进行黑白名单设置,以及对多个 HTTP 特征进行精准白名单设置,主要功能包括: IP 黑白名单设置、精准白名单和规则白名单设置 ![]() 详见:Web 应用防火墙 功能简介-操作指南-文档中心-腾讯云 2.2 云防火墙2.2.1 配置访问控制规则此处以“访问控制”下「互联网边界规则」为例说明,更多访问控制规则参见官网:云防火墙 互联网边界规则-操作指南-文档中心-腾讯云 登录 登录 - 腾讯云,在左侧导航栏中,选择访问控制 -互联网边界规则-入站规则。 ![]() 在“添加入站规则”的弹窗中,可进行规则的配置。访问源类型可选 IP 地址、地理位置、云厂商和 云防火墙 地址模板-操作指南-文档中心-腾讯云。 ![]() 说明:仅企业版和旗舰版云防火墙支持“地理位置”功能,如需使用该功能,可以升级为「企业版」或「旗舰版」云防火墙。 三、宝塔Nginx防火墙 禁止海外访问代码语言:javascript复制说明: 1.安装配置简单,易操作 2.宝塔在实际商务中应用的安全性,缺乏官方权威验证,可自测使用3.1 安装宝塔面板1、需要在linux系统中安装好宝塔面板,可参考以下文档进行安装宝塔:https://cloud.tencent.com/developer/article/1884579 2、在宝塔中安装好LNMP,安装好Nginx(注:网站搭建的底层架构是Nginx) 为方便介绍,本例以腾讯云轻量应用服务器(LH)为例,一般新购LH后,默认是安装了宝塔面板,即可配置使用。 3.2 登录宝塔面板1. 确认宝塔应用已安装 ![]() 2. 防火墙放行面板端口并初始化登录账号密码 ![]() 3.登录宝塔面板网址 ![]() ![]() 打开防火墙的设置-全局设置-禁止海外访问,禁止中国大陆以外的地区访问站点;开启这个功能就可以了,这是通过IP段来屏蔽或者是放行的,所以也有可能存在IP段更新同步不及时以及误判等情况,请知晓。 ![]() 说明:可通过「同步」操作更新国内IP段,同时也可以在「设置」里添加遗漏的国内IP段。 四、 域名解析方式代码语言:javascript复制优点:非常简单 缺点:只能禁止通过域名方法的方式,不能禁止通过IP访问的方式方法:设置域名拒绝IP直接访问。域名解析记录值的境外设置可以填写127.0.0.1或一个内网IP地址,国内可以填写正常的IP的地址来解析,而国外IP访问域名的时候,由于解析的是一个内网地址,是无法正常访问的。 ![]() 举例:以腾讯云DNS解析为例: 设置A记录类型 解析线路:境外 记录值:127.0.0.1 验证:设置后等30分钟后我们再用ping拨测下境外解析,就会发现所有的海外线路都会解析至127.0.0.1这个IP上。 五、 云安全组或系统软防火墙规则5.1 云安全组代码语言:javascript复制说明:云安全组可用来允许或拒绝某些流量,但无法从地理位置维度屏蔽国外IP。一个安全组规则上限是200条(入规则100条,出规则100条),国内IP段有8674+,通过屏蔽国内所有IP段方式不太适合(甚至一个云资源关联多个安全组也不适合);因此建议在安全组中设置允许已知的IP地址登录:在安全组规则中,只添加允许已知的国内IP地址,其他IP地址拒绝访问。 5.2 系统软防火墙黑名单屏蔽:首先需要得到国家IP段,下载地址(这里以china为例):http://www.ipdeny.com/ipblocks/data/countries/cn.zone 其他国家参见:IPdeny IP country CIDR blocks 这里以iptables中的ipset为例,其他类型的软防火墙一个处理逻辑。ipset是iptables的扩展,它允许你创建匹配整个IP地址集合的规则,可以快速的让我们屏蔽某个IP段。 5.2.1 安装ipset#CentOS系统 yum -y install ipset #Debian/Ubuntu系统 apt-get -y install ipset 5.2.2 创建规则#CentOS系统 #创建一个名为cnip的规则 ipset -N cnip hash:net #下载国家IP段 wget -P . http://www.ipdeny.com/ipblocks/data/countries/cn.zone #将IP段添加到cnip规则中 for i in $(cat /root/cn.zone ); do ipset -A cnip $i; done #查看ipset list ipset -L #清空ipset list ipset destroy cnip 5.2.3 设定屏蔽或解除屏蔽#设定仅允许国内IP访问 iptables -I INPUT -m set --match-set cnip src -j ACCEPT 说明:如果仅禁止tcp协议,则添加参数-p tcp #把 INPUT 规则链的默认策略设置为拒绝 (提醒:务必提前确认允许IP在cnip的IP段中,否则执行以下命令将会导致被禁用,请谨慎操作。出现异常可通过VNC登录调整规则) iptables -P INPUT DROP ![]() #-D为删除规则 iptables -D INPUT -m set --match-set cnip src -j ACCEPT #查看封禁列表 iptables -L | grep match-set 六、Nginx安装geoip2模块代码语言:javascript复制说明:此方法来自网络,geoip2模块受ip地址数据库影响,也有可能存在信息同步不及时以及误判等情况,仅参考使用6.1 下载nginx安装 ngx_http_geoip2 模块至少需要nginx 1.18 版本及以上: #wget http://nginx.org/download/nginx-1.18.0.tar.gz 6.2 下载ngx_http_geoip2_module模块#git clone https://github.com/leev/ngx_http_geoip2_module.git #mv ngx_http_geoip2_module /usr/local 6.3 编译安装[root@ddkk tmp]# tar -xf nginx-1.18.0.tar.gz [root@ddkk tmp]# cd nginx-1.18.0/ [root@ddkk nginx-1.18.0]# ./configure --with-http_stub_status_module \ --prefix=/usr/local/nginx \ --user=nginx --group=nginx --with-http_ssl_module --with-stream \ --add-module=/usr/local/ngx_http_geoip2_module #具体编译模块按实际情况 [root@ddkk nginx-1.18.0]# make [root@ddkk nginx-1.18.0]# pkill nginx #杀死nginx [root@ddkk nginx-1.18.0]# /usr/local/nginx/sbin/nginx #再次启动Nginx 6.4 查看nginx版本# /usr/local/nginx/sbin/nginx -V 6.5 下载最新的IP地址数据库文件6.5.1 模块安装成功后,还要在 Nginx 里指定数据库,在安装运行库时默认安装了两个,位于 /usr/share/GeoIP/ 目录下,一个只有 IPv4,一个包含 IPv4 和 IPv6: 登录www.maxmind.com 网址,创建账户 下载最新的库文件(账户创建就不演示了) ![]() 选择GeoLite2 Country ,点击 Download GZIP 下载即可 ![]() 上传到 /usr/share/GeoIP/ 下并解压 6.5.2 配置nginx 配置文件,修改前先备份配置文件 代码语言:javascript复制# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf-bak # vim /usr/local/nginx/conf/nginx.conf 在http 中添加几行代码,定义数据库文件位置 geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb { auto_reload 5m; $geoip2_data_country_code country iso_code; } map $geoip2_data_country_code $allowed_country { default yes; CN no; }![]() 6.5.3 在server 中的 location 下添加条件,如果满足IP是国外IP就执行下面的return 动作,这里定义了3种, 注释了其中两个。 如:当访问IP 是国外IP ,直接返回404 代码语言:javascript复制if ($allowed_country = yes) { # return https://www.baidu.com; # return /home/japan; return 404; }![]() 6.5.4 修改完毕后, 检测下配置文件,重新加载下 nginx 代码语言:javascript复制# /usr/local/nginx/sbin/nginx -t # /usr/local/nginx/sbin/nginx -s reload6.6 测试验证使用海外节点的服务器去访问网站,验证访问网站是否是配置的404 Not Found报错 。到此我们通过Nginx来实现禁止国外IP访问网站就结束了。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |